package com.ssy.lingxi.order.service.base;

import com.ssy.lingxi.common.constant.order.OrderTypeEnum;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.entity.OrderDO;
import com.ssy.lingxi.order.model.bo.OrderTypeModeBO;
import com.ssy.lingxi.order.model.bo.VendorBO;
import com.ssy.lingxi.order.model.constant.BuyerInnerStatusEnum;
import com.ssy.lingxi.order.model.constant.VendorInnerStatusEnum;
import com.ssy.lingxi.order.model.dto.OrderSeparateDTO;
import com.ssy.lingxi.order.model.dto.VendorLogoDTO;
import com.ssy.lingxi.order.model.vo.basic.request.BusinessOrderProductVO;
import com.ssy.lingxi.order.model.vo.basic.request.MobileOrderProductVO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderProductVO;
import com.ssy.lingxi.order.model.vo.basic.request.PurchaseOrderProductVO;
import com.ssy.lingxi.order.model.vo.basic.response.DropdownItem;
import com.ssy.lingxi.order.model.vo.buyer.response.BuyerOrderDetailVO;
import com.ssy.lingxi.order.model.vo.platform.response.PlatformOrderDetailVO;
import com.ssy.lingxi.order.model.vo.vendor.response.VendorOrderDetailVO;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

/**
 * 基础订单服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-15
 */
public interface IBaseOrderService {
    /**
     * 查询订单类型列表
     * @return 订单类型列表
     */
    List<DropdownItem> listOrderTypes();

    /**
     * 判断订单是否能售后
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canAfterSaleOrder(OrderDO order);

    /**
     * 判断采购商是否能取消订单
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canBuyerCancelOrder(OrderDO order);

    /**
     * 判断采购商是否能调整送货时间
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canBuyerModifyDeliverTime(OrderDO order);

    /**
     * 判断采购商是否能退款订单
     * @param order 订单
     * @return true-是，false-否
     */
    Boolean canBuyerRefundOrder(OrderDO order);

    /**
     * 判断采购商是否能删除订单
     * @param order 订单
     * @return true-是，false-否
     */
    Boolean canBuyerDeleteOrder(OrderDO order);

    /**
     * 判断供应商是否能取消订单
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canVendorCancelOrder(OrderDO order);

    /**
     * 判断订单是否能中止
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canTerminateOrder(OrderDO order);

    /**
     * 判断采购商是否能评论订单
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canBuyerCommentOrder(OrderDO order);

    /**
     * 判断供应商是否能评论订单
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canVendorCommentOrder(OrderDO order);

    /**
     * 判断订单是否能转单
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canTransferOrder(OrderDO order);

    /**
     * 判断订单是否能修改订单价格
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canVendorModifyOrderPrice(OrderDO order);

    /**
     * 判断订单是否能修改订单
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canVendorModifyOrder(OrderDO order);

    /**
     * 判断是否能申请开票
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canApplyInvoice(OrderDO order);

    /**
     * 判断供应商是否能生成支付链接
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canVendorGeneratePayLink(OrderDO order);

    /**
     * 采购商是否能“邀请拼团”
     * @param order 订单
     * @return true-是， false-否
     */
    Boolean canBuyerInviteGroup(OrderDO order);

    /**
     * 采购商用户是否能领取“待分配订单”
     * @param order 订单
     * @return true - 是，false-否
     */
    Boolean canBuyerTakeOrder(OrderDO order);

    /**
     * 供应商用户是否能领取“待分配订单”
     * @param order 订单
     * @return true-是，false-否
     */
    Boolean canVendorTakeOrder(OrderDO order);

    /**
     * 订单是否已经提交给了供应商
     * @param order 订单
     * @return true-是，false-否
     */
    Boolean hasSubmittedToVendor(OrderDO order);

    /**
     * 根据商城类型判断订单类型、订单模式
     * @param shopType 商城类型枚举
     * @return 订单类型、订单模式
     */
    OrderTypeModeBO findOrderTypeMode(Integer shopType);

    /**
     * （采购订单）根据供应商分组采购订单，进行拆单
     * @param products 订单商品列表
     * @return 供应商、上级供应商分组
     */
    Map<OrderSeparateDTO, List<OrderProductVO>> separateBuyerOrder(List<OrderProductVO> products);

    /**
     * （App订单）根据供应商分组采购订单，进行拆单
     * @param products 订单商品列表
     * @return 供应商、上级供应商分组
     */
    Map<OrderSeparateDTO, List<MobileOrderProductVO>> separateMobileOrder(List<MobileOrderProductVO> products);

    /**
     * （B2B订单）根据供应商分组B2B订单，进行拆单
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId   供应会员角色Id
     * @param vendorMemberName 供应会员名称
     * @param products 订单商品列表
     * @return 供应商、上级供应商分组
     */
    Map<OrderSeparateDTO, List<BusinessOrderProductVO>> separateBusinessOrder(Long vendorMemberId, Long vendorRoleId, String vendorMemberName, List<BusinessOrderProductVO> products);

    /**
     * （现货采购订单）根据供应商分组现货采购订单，进行拆单
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId   供应会员角色Id
     * @param vendorMemberName 供应会员名称
     * @param products 订单商品列表
     * @return 供应商、上级供应商分组
     */
    Map<OrderSeparateDTO, List<PurchaseOrderProductVO>> separatePurchaseOrder(Long vendorMemberId, Long vendorRoleId, String vendorMemberName, List<PurchaseOrderProductVO> products);

    /**
     * 分页查询采购订单（新增后，可修改，尚未提交的订单，采购商内部状态固定为 BuyerInnerStatusEnum.BUYER_TO_SUBMIT_VALIDATE）
     * @param buyerMemberId      采购会员Id
     * @param buyerRoleId        采购会员角色Id
     * @param orderNo            订单编号
     * @param digest             订单摘要
     * @param vendorMemberName   供应会员名称
     * @param startDate          订单起始日期
     * @param endDate            订单结束日期
     * @param orderTypes         订单类型枚举列表
     * @param current            当前页
     * @param pageSize           每页行数
     * @return 查询结果
     */
    Page<OrderDO> pageCreatedOrders(Long buyerMemberId, Long buyerRoleId, String orderNo, String digest, String vendorMemberName, String startDate, String endDate, List<OrderTypeEnum> orderTypes, int current, int pageSize);

    /**
     * 分页查询待分配采购订单
     * @param buyerMemberId      采购会员Id
     * @param buyerRoleId        采购会员角色Id
     * @param orderNo            订单编号
     * @param digest             订单摘要
     * @param vendorMemberName   供应会员名称
     * @param startDate          订单起始日期
     * @param endDate            订单结束日期
     * @param orderType          订单类型枚举
     * @param current            当前页
     * @param pageSize           每页行数
     * @return 查询结果
     */
    Page<OrderDO> pageBuyerToTakeOrders(Long buyerMemberId, Long buyerRoleId, String orderNo, String digest, String vendorMemberName, String startDate, String endDate, Integer orderType, int current, int pageSize);

    /**
     * 分页查询采购订单
     * @param buyerMemberId      采购会员Id
     * @param buyerRoleId        采购会员角色Id
     * @param orderNo            订单编号
     * @param digest             订单摘要
     * @param vendorMemberName   供应会员名称
     * @param startDate          订单起始日期
     * @param endDate            订单结束日期
     * @param orderType          订单类型枚举
     * @param buyerInnerStatus   采购会员内部状态
     * @param outerStatus        订单外部状态
     * @param current            当前页
     * @param pageSize           每页行数
     * @return 查询结果
     */
    Page<OrderDO> pageBuyerOrders(Long buyerMemberId, Long buyerRoleId, String orderNo, String digest, String vendorMemberName, String startDate, String endDate, Integer orderType, Integer buyerInnerStatus, Integer outerStatus, int current, int pageSize);

    /**
     * 分页查询待分配销售订单
     * @param vendorMemberId  供应会员Id
     * @param vendorRoleId    供应会员角色Id
     * @param storeIds         门店ids
     * @param orderNo         订单编号
     * @param digest          订单摘要
     * @param buyerMemberName 采购会员名称
     * @param startDate       订单起始日期
     * @param endDate         订单结束日期
     * @param orderType       订单类型枚举
     * @param current         当前页
     * @param pageSize        每页行数
     * @return 查询结果
     */
    Page<OrderDO> pageVendorToTakeOrders(Long vendorMemberId, Long vendorRoleId, List<Long> storeIds, String orderNo, String digest, String buyerMemberName, String startDate, String endDate, Integer orderType, int current, int pageSize);

    /**
     * 分页查询销售订单
     * @param vendorMemberId        供应会员Id
     * @param vendorRoleId          供应会员角色Id
     * @param orderNo               订单编号
     * @param digest                订单摘要
     * @param buyerMemberName       采购会员名称
     * @param startDate             订单起始日期
     * @param endDate               订单结束日期
     * @param orderType             订单类型枚举
     * @param vendorInnerStatus     供应会员内部状态
     * @param outerStatus           订单外部状态
     * @param current               当前页
     * @param pageSize              每页行数
     * @return 查询结果
     */
    Page<OrderDO> pageVendorOrders(Long vendorMemberId, Long vendorRoleId, String orderNo, String digest, String buyerMemberName, String startDate, String endDate, Integer orderType, Integer vendorInnerStatus, Integer outerStatus, int current, int pageSize);

    /**
     * 分页查询销售订单
     * @param vendorMemberId      供应会员Id
     * @param vendorRoleId        供应会员角色Id
     * @param orderNo             订单编号
     * @param digest              订单摘要
     * @param buyerMemberName     采购会员名称
     * @param startDate           订单起始日期
     * @param endDate             订单结束日期
     * @param orderType           订单类型枚举
     * @param vendorInnerStatuses 供应会员内部状态
     * @param outerStatus         订单外部状态
     * @param current             当前页
     * @param pageSize            每页行数
     * @return 查询结果
     */
    Page<OrderDO> pageVendorOrders(Long vendorMemberId, Long vendorRoleId, String orderNo, String digest, String buyerMemberName, String startDate, String endDate, Integer orderType, List<Integer> vendorInnerStatuses, Integer outerStatus, int current, int pageSize);

    /**
     * 分页查询待核销订单
     * @param vendorMemberId      供应会员Id
     * @param vendorRoleId        供应会员角色Id
     * @param orderNo             订单编号
     * @param digest              订单摘要
     * @param buyerMemberName     采购会员名称
     * @param startDate           订单起始日期
     * @param endDate             订单结束日期
     * @param orderType           订单类型枚举
     * @param vendorInnerStatuses 供应会员内部状态
     * @param outerStatus         订单外部状态
     * @param current             当前页
     * @param pageSize            每页行数
     * @return 查询结果
     */
    Page<OrderDO> pageVendorPickUpOrders(Long vendorMemberId, Long vendorRoleId, String orderNo, String digest, String buyerMemberName, String startDate, String endDate, Integer orderType, Integer vendorInnerStatuses, Integer outerStatus, int current, int pageSize);

    /**
     * 全量查询采购订单(导出excel)
     * @param buyerMemberId      采购会员Id
     * @param buyerRoleId        采购会员角色Id
     * @param orderNo            订单编号
     * @param digest             订单摘要
     * @param vendorMemberName   供应会员名称
     * @param startDate          订单起始日期
     * @param endDate            订单结束日期
     * @param orderType          订单类型枚举
     * @param buyerInnerStatuses 采购会员内部状态
     * @param outerStatus        订单外部状态
     * @return 查询结果
     */
    List<OrderDO> exportBuyerOrders(Long buyerMemberId, Long buyerRoleId, String orderNo, String digest, String vendorMemberName, String startDate, String endDate, Integer orderType, List<Integer> buyerInnerStatuses, Integer outerStatus);

    /**
     * 全量查询销售订单(导出excel)
     * @param vendorMemberId      供应会员Id
     * @param vendorRoleId        供应会员角色Id
     * @param orderNo             订单编号
     * @param digest              订单摘要
     * @param buyerMemberName     采购会员名称
     * @param startDate           订单起始日期
     * @param endDate             订单结束日期
     * @param orderType           订单类型枚举
     * @param vendorInnerStatuses 供应会员内部状态
     * @param outerStatus         订单外部状态
     * @return 查询结果
     */
    List<OrderDO> exportVendorOrders(Long vendorMemberId, Long vendorRoleId, String orderNo, String digest, String buyerMemberName, String startDate, String endDate, Integer orderType, List<Integer> vendorInnerStatuses, Integer outerStatus);

    /**
     * 查询采购订单详情
     * @param order 订单
     * @param buyerInnerStatusEnum 采购商内部状态
     * @return 订单详情
     */
    Wrapper<BuyerOrderDetailVO> getBuyerOrderDetail(OrderDO order, BuyerInnerStatusEnum buyerInnerStatusEnum);

    /**
     * 查询采购订单详情
     * @param order 订单
     * @param buyerInnerStatusEnums 采购商内部状态列表
     * @return 订单详情
     */
    Wrapper<BuyerOrderDetailVO> getBuyerOrderDetail(OrderDO order, List<BuyerInnerStatusEnum> buyerInnerStatusEnums);

    /**
     * 查询采购订单详情
     * @param order 订单
     * @return 订单详情
     */
    Wrapper<BuyerOrderDetailVO> getBuyerOrderDetail(OrderDO order);

    /**
     * 查询供应订单详情
     * @param order 订单
     * @param vendorInnerStatusEnum 供应商内部状态
     * @return 查询结果
     */
    Wrapper<VendorOrderDetailVO> getVendorOrderDetail(OrderDO order, VendorInnerStatusEnum vendorInnerStatusEnum);

    /**
     * 查询供应订单详情
     * @param order 订单
     * @param vendorInnerStatusEnums 供应商内部状态列表
     * @return 查询结果
     */
    Wrapper<VendorOrderDetailVO> getVendorOrderDetail(OrderDO order, List<VendorInnerStatusEnum> vendorInnerStatusEnums);

    /**
     * 查询供应订单详情
     * @param order 订单
     * @return 查询结果
     */
    Wrapper<VendorOrderDetailVO> getVendorOrderDetail(OrderDO order);

    /**
     * 平台后台 - 查询订单详情
     * @param order 订单
     * @return 查询结果
     */
    Wrapper<PlatformOrderDetailVO> getOrderDetail(OrderDO order);

    /**
     * 订单创建完成后，扣减库存
     * @param order 订单
     * @return 操作结果
     */
    Wrapper<Void> deduceInventory(OrderDO order);

    /**
     * 订单中止后，返还库存
     * @param order 订单
     * @return 操作结果
     */
    Wrapper<Void> resumeInventory(OrderDO order);

    /**
     * 下单成功后，删除购物车
     * @param shopType 商城类型
     * @param cartIds 购物车Id列表
     */
    void emptyProductCarts(Integer shopType, List<Long> cartIds);

    /**
     * 当订单完成后要执行的异步操作
     * @param order 订单
     */
    void operateAfterOrderAccomplished(OrderDO order);

    /**
     * 订单创建（提交）完成后，向报表服务发送供应商订单金额
     * @param order 订单
     */
    void reportVendorOrderAmount(OrderDO order);

    /**
     * 订单批量创建（提交）完成后，向报表服务发送供应商订单金额
     * @param orders 订单列表
     */
    void reportVendorOrderAmount(List<OrderDO> orders);

    /**
     * 向报表服务发送采购商订单统计数据
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId 采购会员角色Id
     * @param lastBuyerInnerStatus （流程执行之前的、上一次的采购商内部状态）对应要减少统计的操作，如为0或Null表示不减少
     * @param currentBuyerInnerStatus （流程执行之后的，当前的采购商内部张贴）对应要增加统计的操作，如为0或Null表示不增加
     */
    void reportBuyerOrder(Long buyerMemberId, Long buyerRoleId, Integer lastBuyerInnerStatus, Integer currentBuyerInnerStatus);

    /**
     * 向消息服务发送采购商订单消息
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId 采购会员角色Id
     * @param currentBuyerInnerStatus （流程执行之后的）当前的采购商内部状态
     * @param orderNo 订单号
     * @param digest 订单摘要
     */
    void messageBuyerOrder(Long buyerMemberId, Long buyerRoleId, Long userId, Integer currentBuyerInnerStatus, String orderNo, String digest);

    /**
     * 向消息服务发送采购商订单收货确认消息（含自提商品）
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId   采购会员角色Id
     * @param messageCode   消息模板code
     * @param orderNo       订单号
     * @param digest        订单摘要
     * @param address       自提地址
     * @param selfCode      自提码
     */
    void messageBuyerDeliverSelfOrder(Long buyerMemberId, Long buyerRoleId, Long userId, String messageCode, String orderNo, String digest, String address, String selfCode);

    /**
     * 向消息服务发送采购商订单收货确认消息（不含自提商品）
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId   采购会员角色Id
     * @param messageCode   消息模板code
     * @param orderNo       订单号
     * @param digest        订单摘要
     * @param company       物流公司
     * @param logisticsNo   物流单号
     */
    void messageBuyerDeliverOrder(Long buyerMemberId, Long buyerRoleId, Long userId, String messageCode, String orderNo, String digest, String company, String logisticsNo);

    /**
     * 向报表服务发送采购商订单统计数据
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId 采购会员角色Id
     * @param lastBuyerInnerStatusEnum （流程执行之前的、上一次的采购商内部状态）对应要减少统计的操作，如为0或Null表示不减少
     * @param currentBuyerInnerStatusEnum （流程执行之后的，当前的采购商内部张贴）对应要增加统计的操作，如为0或Null表示不增加
     */
    void reportBuyerOrder(Long buyerMemberId, Long buyerRoleId, BuyerInnerStatusEnum lastBuyerInnerStatusEnum, BuyerInnerStatusEnum currentBuyerInnerStatusEnum);

    /**
     * 向消息服务发送供应商订单消息
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId 供应会员角色Id
     * @param currentVendorInnerStatus （流程执行之后的）当前的供应商内部状态
     * @param orderNo 订单号
     * @param digest 订单摘要
     */
    void messageVendorOrder(Long vendorMemberId, Long vendorRoleId, Long userId, Integer currentVendorInnerStatus, String orderNo, String digest);

    /**
     * （批量）向报表服务发送采购商订单统计数据
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId 采购会员角色Id
     * @param lastBuyerInnerStatusEnum （流程执行之前的、上一次的采购商内部状态）对应要减少统计的操作，如为0或Null表示不减少
     * @param increaseCount 减少的数量
     * @param currentBuyerInnerStatusEnum （流程执行之后的，当前的采购商内部张贴）对应要增加统计的操作，如为0或Null表示不增加
     * @param decreaseCount 增加的数量
     */
    void reportBuyerOrder(Long buyerMemberId, Long buyerRoleId, BuyerInnerStatusEnum lastBuyerInnerStatusEnum, int decreaseCount, BuyerInnerStatusEnum currentBuyerInnerStatusEnum, int increaseCount);

    /**
     * 向报表服务发送供应商订单统计数据
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId 供应会员角色Id
     * @param lastVendorInnerStatus （流程执行之前的、上一次的供应商内部状态）对应要减少统计的操作，如为0或Null表示不减少
     * @param currentVendorInnerStatus （流程执行之后的，当前的供应商内部张贴）对应要增加统计的操作，如为0或Null表示不增加
     */
    void reportVendorOrder(Long vendorMemberId, Long vendorRoleId, Integer lastVendorInnerStatus, Integer currentVendorInnerStatus);

    /**
     * 向报表服务发送供应商订单统计数据
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId 供应会员角色Id
     * @param lastVendorInnerStatusEnum （流程执行之前的、上一次的供应商内部状态）对应要减少统计的操作，如为0或Null表示不减少
     * @param currentVendorInnerStatusEnum （流程执行之后的，当前的供应商内部张贴）对应要增加统计的操作，如为0或Null表示不增加
     */
    void reportVendorOrder(Long vendorMemberId, Long vendorRoleId, VendorInnerStatusEnum lastVendorInnerStatusEnum, VendorInnerStatusEnum currentVendorInnerStatusEnum);

    /**
     * （批量）向报表服务发送供应商订单统计数据
     * @param orders 订单列表
     * @param currentVendorInnerStatusEnum 供应商当前的内部状态
     */
    void reportVendorOrder(List<OrderDO> orders, VendorInnerStatusEnum currentVendorInnerStatusEnum);

    /**
     * 当拼团订单处于“待发货”状态时，向营销服务发送数据
     * @param order 订单
     */
    void notifyGroupOrder(OrderDO order);

    /**
     * 当订单外部状态是代发货时,发放优惠券,并发送通知消息
     * @param order 订单
     */
    void sendCoupons(OrderDO order);

    /**
     * 向合同服务发送SRM订单数据
     * @param order 订单
     */
    void sendSrmOrder(OrderDO order);

    /**
     * 批量向合同服务发送SRM订单数据
     * @param orders 订单列表
     */
    void batchSendSrmOrder(List<OrderDO> orders);

    /**
     * 向合同服务取消SRM订单数据
     * @param order 订单
     */
    void cancelSrmOrder(OrderDO order);

    /**
     * 查询供应商店铺或商城Logo
     * @param shopId 商城Id
     * @param vendors 供应商列表
     * @return 查询结果
     */
    Wrapper<List<VendorLogoDTO>> checkVendorShopLogos(Long shopId, List<VendorBO> vendors);

    /**
     * 查询供应商店铺或商城Logo
     * @param shopId 商城Id
     * @param vendorMemberId 供应商会员Id
     * @param vendorRoleId 供应商会员角色Id
     * @return 供应商Logo
     */
    Wrapper<VendorLogoDTO> checkVendorShopLogo(Long shopId, Long vendorMemberId, Long vendorRoleId);

    /**
     * 查询供应商店铺或商城Logo
     * @param shopId 商城Id
     * @param vendors 供应商列表
     * @return 查询结果
     */
    List<VendorLogoDTO> findVendorShopLogos(Long shopId, List<VendorBO> vendors);

    /**
     * 查询供应商店铺或商城Logo
     * @param shopId 商城Id
     * @param vendorMemberId 供应商会员Id
     * @param vendorRoleId 供应商会员角色Id
     * @return 供应商Logo
     */
    String findVendorShopLogo(Long shopId, Long vendorMemberId, Long vendorRoleId);

    /**
     * 批量查询供应商店铺或商城Logo
     * @param vendorShopMap 要转单的订单
     * @return 供应商店铺或商城Logo
     */
    List<VendorLogoDTO> batchFindVendorShopLogos(Map<Long, List<VendorBO>> vendorShopMap);

    /**
     * 查询供应商会员Logo
     * @param vendorMemberId 供应商会员Id
     * @return 供应商会员Logo
     */
    String findVendorMemberLogo(Long vendorMemberId);

    /**
     * 订单创建完成后，通知营销服务，扣减营销活动记录、优惠券使用记录
     * @param orders 订单列表
     */
    void notifyPromotions(List<OrderDO> orders);

    /**
     * 订单取消后，通知营销服务，返还营销活动、优惠券记录
     * @param order 订单
     */
    void resumePromotions(OrderDO order);

    /**
     * 订单支付后，将“平台优惠券”同步给结算服务
     * @param orders 订单列表
     */
    void notifyPlatformCoupons(List<OrderDO> orders);

    /**
     * 生成小程序码
     * @param params 二维码参数
     * @param page   跳转页面路径
     * @return base64编码
     */
    Wrapper<String> createMiniCode(String params, String page);

    /**
     * 分页查询订单转单列表
     * @param memberId              供应商会员id
     * @param memberRoleId          角色id
     * @param orderNo               订单号
     * @param digest                订单摘要
     * @param buyerMemberName       采购会员名称
     * @param startDate             下单开始时间
     * @param endDate               下单结束时间
     * @param orderTransitionType   转单状态
     * @param current               当前页
     * @param pageSize              每页数量
     * @return
     */
    Page<OrderDO> pageTransitionOrderList(Long memberId, Long memberRoleId, String orderNo, String digest, String buyerMemberName, String startDate, String endDate, Integer orderTransitionType, int current, int pageSize);
}
